<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>发布订阅模式</title>
  </head>
  <body>
    <script>
    // 事件触发器
    class EventEmitter {
      constructor() {
        this.subs = Object.create(null) // 参数的作用是设置对象的原型，null 该对象没有原型属性
      }

      // 注册事件
      $on(eventType, handler) {
        this.subs[eventType] = this.subs[eventType] || []
        this.subs[eventType].push(handler)
      }

      // 触发事件
      $emit(eventType) {
        if (this.subs[eventType]) {
          this.subs[eventType].forEach(handler => {
            handler() // 调用事件处理函数
          })
        }
      }
    }

    let em = new EventEmitter()
    em.$on('click', () => { console.log('click1') })
    em.$on('click', () => { console.log('click2') })
    em.$emit('click')
    </script>
  </body>
</html>
